package com.changgou.goods.service.impl;

import com.changgou.goods.dao.CategoryMapper;
import com.changgou.goods.pojo.Category;
import com.changgou.goods.service.CategoryService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

/**
 * @Author seafwg
 * @Date 2021/11/30 4:07 下午
 * @Version 1.0
 * @description 商品分类模块管理
 */
@Service
public class CategoryServiceImpl implements CategoryService {

    @Autowired
    private CategoryMapper categoryMapper;

    /**
     * 根据pId查询子菜单：
     * @param pId
     * @return
     */
    @Override
    public List<Category> findListById(Integer pId) {
        // select * from tb_category where parent_id = pId;
        Category category = new Category();
        category.setParentId(pId);
        // 如果一个对象不为空，设置属性调用查询则会根据这个属性查询
        List<Category> list = categoryMapper.select(category);
        return list;
    }

    /**
     * 新增商品
     * @param category
     * @return
     */
    @Override
    public int add(Category category) {
        return categoryMapper.insert(category);
    }

    /**
     * 根据id删除商品
     * @param id
     * @return
     */
    @Override
    public int delete(Integer id) {
        return categoryMapper.deleteByPrimaryKey(id);
    }

    /**
     * 根据id更新数据
     * @param category
     * @param id
     */
    @Override
    public void update(Category category, Integer id) {
        category.setId(id);
        categoryMapper.updateByPrimaryKey(category);
    }

    /**
     * 根据id查询商品
     * @param id
     * @return
     */
    @Override
    public Category findById(Integer id) {
        return categoryMapper.selectByPrimaryKey(id);
    }

    /**
     * 查询所有
     * @return
     */
    @Override
    public List<Category> findAll() {
        return categoryMapper.selectAll();
    }

    /**
     * 多条件查询
     * @param category
     * @return
     */
    @Override
    public List<Category> findList(Category category) {
        // 构造查询条件
        Example example = buildCategoryExample(category);
        List<Category> categoryList = categoryMapper.selectByExample(example);
        return categoryList;
    }

    /**
     * 分页查询
     * @param pageSize
     * @param pageNum
     * @return
     */
    @Override
    public PageInfo<Category> findPage(Integer pageSize, Integer pageNum) {
        // 使用分页组件分页
        PageHelper.startPage(pageSize, pageNum);
        List<Category> categoryList = categoryMapper.selectAll();
        // 构造分页数据
        PageInfo<Category> pageInfo = new PageInfo<Category>(categoryList);
        return pageInfo;
    }

    /**
     * 多条件分页查询
     * @param category
     * @param pageSize
     * @param pageNum
     * @return
     */
    @Override
    public PageInfo<Category> findPageList(Category category, Integer pageSize, Integer pageNum) {
        // 使用分页组件分页
        PageHelper.startPage(pageSize, pageNum);
        // 构造查询条件
        Example example = buildCategoryExample(category);
        // 使用查询条件践行查询
        List<Category> categoryList = categoryMapper.selectByExample(example);
        // 生成分页数据
        PageInfo<Category> pageInfo = new PageInfo<Category>(categoryList);
        return pageInfo;
    }

    /**
     * 构建查询条件
     * @param category
     * @return
     */
    public Example buildCategoryExample(Category category) {
        // 生成查询对象
        Example example = new Example(Category.class);
        // 生成条件对象
        Example.Criteria criteria = example.createCriteria();
        // 构建查询条件
        if(category != null) {
            // id
            if(!StringUtils.isEmpty(category.getId())) {
                criteria.andEqualTo("id", category.getId());
            }
            // name - 分类名称
            if(!StringUtils.isEmpty(category.getName())) {
                criteria.andLike("name", "%" + category.getName() + "%");
            }
            // goodsNum - 商品数量
            if(!StringUtils.isEmpty(category.getGoodsNum())) {
                criteria.andEqualTo("GoodsNum", category.getGoodsNum());
            }
            // isShow - 是否显示
            if(!StringUtils.isEmpty(category.getIsShow())) {
                criteria.andEqualTo("isShow", category.getIsShow());
            }
            // isMenu - 是否导航
            if(!StringUtils.isEmpty(category.getIsMenu())) {
                criteria.andEqualTo("isMenu", category.getIsMenu());
            }
            // seq - 排序
            if(!StringUtils.isEmpty(category.getSeq())) {
                criteria.andEqualTo("seq", category.getSeq());
            }
            // parentId - 上级id
            if(!StringUtils.isEmpty(category.getParentId())) {
                criteria.andEqualTo("parentId", category.getParentId());
            }
            // templateId - 模板id
            if(!StringUtils.isEmpty(category.getTemplateId())) {
                criteria.andEqualTo("templateId", category.getTemplateId());
            }
        }
        return example;
    }
}
